A multi-master system (e.g., multi-processor system) typically contains resources which are shared among the masters. These shared resources can include peripherals or memory regions, for example. In many cases, these shared resources can only be accessed by one master at a time, which requires a semaphore to atomically test whether the resource is free and allocate the resource if it is free. A semaphore is a variable or abstract data type that is used for controlling access, by multiple processes or processors. Other masters need to wait for the semaphore to be released until their access to the resource can be granted.
Another case of signaling between masters is as part of a messaging protocol. Shared memory can be used to exchange messages between masters. A signal is sent from a first master to indicate to a second master that a new message is available in a queue. Semaphores and messaging signals are also required in operating systems executing on one master, and these semaphores and messaging signals may or may not rely on hardware available in the system.